package com.ruoyi.services.service.impl;

import java.util.Date;
import java.util.List;

import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.common.constant.HttpStatus;
import com.ruoyi.common.enums.FeeAndRepairStatus;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.services.mapper.RepairOnlineMapper;
import com.ruoyi.services.domain.RepairOnline;
import com.ruoyi.services.service.IRepairOnlineService;

/**
 * 在线报修Service业务层处理
 *
 * @author ruoyi
 * @date 2023-10-20
 */
@Service
public class RepairOnlineServiceImpl implements IRepairOnlineService {
    @Autowired
    private RepairOnlineMapper repairOnlineMapper;

    /**
     * 查询在线报修
     *
     * @param id 在线报修主键
     * @return 在线报修
     */
    @Override
    public RepairOnline selectRepairOnlineById(Long id) {
        return repairOnlineMapper.selectRepairOnlineById(id);
    }

    /**
     * 查询在线报修列表
     *
     * @param repairOnline 在线报修
     * @return 在线报修
     */
    @Override
    @DataScope(deptAlias = "d", userAlias = "u")
    public List<RepairOnline> selectRepairOnlineList(RepairOnline repairOnline) {
        return repairOnlineMapper.selectRepairOnlineList(repairOnline);
    }

    /**
     * 新增在线报修
     *
     * @param repairOnline 在线报修，查询已有报修情况
     * @return 结果
     */
    @Override
    public int insertRepairOnline(RepairOnline repairOnline) {
        repairOnline.setUserId(SecurityUtils.getUsername());
        //查询已有报修情况(查询是否存在处理中的报修)
        RepairOnline repairOnlineQuery = new RepairOnline();
        repairOnlineQuery.setUserId(repairOnline.getUserId());
        repairOnlineQuery.setStatus(FeeAndRepairStatus.INPROCESS.getCode());
        List<RepairOnline> repairOnlineList = repairOnlineMapper.selectRepairOnlineList(repairOnlineQuery);
        if (repairOnlineList.size()>0){
            throw new ServiceException("报修申请已提交，请勿重复申请", HttpStatus.REPAIR);
        }
        //判断报修申请情况是否重复
        repairOnline.setDate(new Date());
        repairOnline.setStatus(FeeAndRepairStatus.INPROCESS.getCode());
        return repairOnlineMapper.insertRepairOnline(repairOnline);
    }

    /**
     * 修改在线报修
     *
     * @param repairOnline 在线报修
     * @return 结果
     */
    @Override
    public int updateRepairOnline(RepairOnline repairOnline) {
        return repairOnlineMapper.updateRepairOnline(repairOnline);
    }

    /**
     * 批量删除在线报修
     *
     * @param ids 需要删除的在线报修主键
     * @return 结果
     */
    @Override
    public int deleteRepairOnlineByIds(Long[] ids) {
        return repairOnlineMapper.deleteRepairOnlineByIds(ids);
    }

    /**
     * 删除在线报修信息
     *
     * @param id 在线报修主键
     * @return 结果
     */
    @Override
    public int deleteRepairOnlineById(Long id) {
        return repairOnlineMapper.deleteRepairOnlineById(id);
    }
}
